package cn.piesat.scanning.business.nongqi.algorithm;

import cn.piesat.scanning.business.common.algorithm.ftpScan.FtpScanAbstract;
import cn.piesat.scanning.dto.HtPathConfigurationDTO;
import cn.piesat.scanning.dto.HtScanningMetadataDTO;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.Date;

/**
 * @author xhl
 */
@Component
public class NqFtpScan extends FtpScanAbstract {

    @Override
    public HtScanningMetadataDTO splitName(File file, HtPathConfigurationDTO pathDTO) {
        HtScanningMetadataDTO metadataDTO = new HtScanningMetadataDTO();
        String fileName = file.getName();
        String path = file.toString().substring(pathDTO.getScanningPath().length());
        splitFileName(fileName,metadataDTO);
        metadataDTO.setFilePath(path);
        metadataDTO.setFileName(fileName);
        metadataDTO.setFileSize(file.length());
        metadataDTO.setPathConfigId(pathDTO.getId());
        metadataDTO.setFileType(fileName.substring(fileName.lastIndexOf(".")+1).toUpperCase());
        metadataDTO.setCreateTime(new Date());
        return metadataDTO;
    }

    /**
     * 获取文件名称中的 卫星、传感器、分辨率、等级、日期等信息
     * PS：因各个卫星命名规则不同，当接入新的数据时需增加对应文件名称 [格式分割代码]
     * @param fileName 文件名称
     * @param entityDto 实体类
     */
    private void splitFileName(String fileName,HtScanningMetadataDTO entityDto){
        String[] nameSplit = fileName.split("_");
        if (fileName.contains("FY4A")){
            //FY4A-_AGRI--_N_DISK_1047E_L1-_FDI-_MULT_NOM_20190520040000_20190520041459_4000M_V0001.HDF
            //  0     1    2    3   4    5   6    7    8      9              10          11     12
            entityDto.setSatellite(nameSplit[0].replace("-",""));
            entityDto.setSensor(nameSplit[1].replace("-",""));
            entityDto.setResolution(formatResolution(nameSplit[11]));
            entityDto.setDataLevel(nameSplit[5].replace("-",""));
            entityDto.setFileDate(nameSplit[9]);
            entityDto.setRegion(nameSplit[3]);
        }
        if (fileName.contains("FY3D") && fileName.contains("MERSI")){
            //FY3D_MERSI_GBAL_L1_20190828_0640_0250M_MS.HDF
            //  0     1    2  3   4         5   6    7
            entityDto.setSatellite(nameSplit[0]);
            entityDto.setSensor(nameSplit[1]);
            entityDto.setResolution(nameSplit[6].replace("M",""));
            entityDto.setDataLevel(nameSplit[3]);
            entityDto.setFileDate(nameSplit[4]+nameSplit[5]);
        }
        if (fileName.contains("FY3D") && fileName.contains("MWRIA")){
            //FY3D_MWRIA_ORBT_L2_CLW_MLT_NUL_20190901_0127_025KM_MS.HDF
            //  0     1    2  3   4  5   6    7         8   9     10
            entityDto.setSatellite(nameSplit[0]);
            entityDto.setSensor(nameSplit[1]);
            entityDto.setResolution(nameSplit[9].replace("M",""));
            entityDto.setDataLevel(nameSplit[3]);
            entityDto.setFileDate(nameSplit[7]+nameSplit[8]);
        }
        if (fileName.contains("H08")){
            //HS_H08_FLDK_201803060400.hdf
            // 0  1    2    3
            entityDto.setSatellite(nameSplit[1]);
            entityDto.setFileDate(nameSplit[3]);
        }
        if (fileName.contains("JB20")){
            //JB20_MIR_20190801_060000_W78.1_N1.0_M01_L1A.HDF
            //工作模式 M01    4 5 中心点经度纬度
            entityDto.setSatellite(nameSplit[0]);
            entityDto.setSensor(nameSplit[1]);
            entityDto.setFileDate(nameSplit[2]+nameSplit[3]);
            entityDto.setObsMode(nameSplit[6]);
            entityDto.setDataLevel(nameSplit[7].substring(0,nameSplit[7].lastIndexOf(".")).toUpperCase());
        }
        //以下增加其他文件实现代码

    }
    private String formatResolution(String str) {
        if (str.endsWith("KM")) {
            str = String.valueOf(Integer.parseInt(str.substring(0, str.indexOf("KM"))) * 1000);
        } else if (str.endsWith("M")) {
            str = str.replace("M", "");
        }
        return str;
    }
}
